Ensure that XDG_DATA_HOME is created before using it
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 4 Jul 2012 10:41:50 +0000 (11:41 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 12 Jul 2012 12:42:33 +0000 (08:42 -0400)
The recently-used.xbel storage for recently used files is located inside
the $XDG_DATA_HOME directory; there's no actual guarantee that the
directory has been created already, even though it's very highly
probable on any modern distribution. We should create it, along with its
intermediate parents, before constructing the file monitor that we use
to get change notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=671817

https://bugzilla.gnome.org/show_bug.cgi?id=667808

gtk/gtkrecentmanager.c

index 9d20011cce9bdbf892761e27e4d60e31e028df67..d6b23e7c2e52b977f6db58ce0e715efea040d9e9 100644 (file)
@@ -539,6 +539,18 @@ gtk_recent_manager_monitor_changed (GFileMonitor      *monitor,
 static gchar *
 get_default_filename (void)
 {
+  if (g_mkdir_with_parents (g_get_user_data_dir (), 0755) == -1)
+    {
+      int saved_errno = errno;
+
+      g_critical ("Unable to create user data directory '%s' for storing "
+                  "the recently used files list: %s",
+                  g_get_user_data_dir (),
+                  g_strerror (saved_errno));
+
+      return NULL;
+    }
+
   return g_build_filename (g_get_user_data_dir (),
                            GTK_RECENTLY_USED_FILE,
                            NULL);